#!/usr/bin/env python3
import os
import sys
import argparse

def replace_in_file(file_path, old_str, new_str, encoding='utf-8'):
    try:
        # 读取文件内容
        with open(file_path, 'r', encoding=encoding) as f:
            content = f.read()
        
        # 检查是否需要替换
        if old_str not in content:
            return False
        
        # 执行替换
        new_content = content.replace(old_str, new_str)
        
        # 写回文件
        with open(file_path, 'w', encoding=encoding) as f:
            f.write(new_content)
        
        return True
    except Exception as e:
        print(f"处理文件 {file_path} 时出错: {str(e)}", file=sys.stderr)
        return False

def main():
    # 解析命令行参数
    parser = argparse.ArgumentParser(description='替换文件中的特定字符串')
    parser.add_argument('file_path', help='目标文件路径')
    parser.add_argument('old_str', help='要替换的旧字符串')
    parser.add_argument('new_str', help='替换后的新字符串')
    parser.add_argument('--encoding', default='utf-8', help='文件编码格式，默认为utf-8')
    
    args = parser.parse_args()
    
    # 处理路径，兼容不同操作系统
    file_path = os.path.abspath(os.path.expanduser(args.file_path))
    
    # 检查文件是否存在
    if not os.path.exists(file_path):
        print(f"错误：文件 '{file_path}' 不存在", file=sys.stderr)
        sys.exit(1)
    
    # 检查是否是文件
    if not os.path.isfile(file_path):
        print(f"错误：'{file_path}' 不是文件", file=sys.stderr)
        sys.exit(1)
    
    # 执行替换
    result = replace_in_file(file_path, args.old_str, args.new_str, args.encoding)
    
    if result:
        print(f"成功替换文件 '{file_path}' 中的字符串")
        sys.exit(0)
    else:
        print(f"文件 '{file_path}' 中未找到要替换的字符串或替换失败", file=sys.stderr)
        sys.exit(1)

if __name__ == "__main__":
    main()